package com.platform.apex.util;

import com.google.common.base.Charsets;
import com.google.common.base.Throwables;

import java.io.UnsupportedEncodingException;
import java.nio.ByteBuffer;
import java.nio.charset.Charset;
import java.util.IllegalFormatException;

/**
 * As of right now (Dec 2014) the JVM is optimized around String charset
 * variablse instead of Charset passing.
 */
public class StringUtils {
	private static final Logger log = new Logger(StringUtils.class);
	@Deprecated
	// Charset parameters to String are currently slower than the charset's
	// string name
	public static final Charset UTF8_CHARSET = Charsets.UTF_8;
	public static final String UTF8_STRING = com.google.common.base.Charsets.UTF_8
			.toString();

	public static String fromUtf8(final byte[] bytes) {
		try {
			return new String(bytes, UTF8_STRING);
		} catch (UnsupportedEncodingException e) {
			// Should never happen
			throw Throwables.propagate(e);
		}
	}

	public static String fromUtf8(final ByteBuffer buffer, final int numBytes) {
		final byte[] bytes = new byte[numBytes];
		buffer.get(bytes);
		return fromUtf8(bytes);
	}

	public static String fromUtf8(final ByteBuffer buffer) {
		return fromUtf8(buffer, buffer.remaining());
	}

	public static byte[] toUtf8(final String string) {
		try {
			return string.getBytes(UTF8_STRING);
		} catch (UnsupportedEncodingException e) {
			// Should never happen
			throw Throwables.propagate(e);
		}
	}

	public static String safeFormat(String message, Object... formatArgs) {
		if (formatArgs == null || formatArgs.length == 0) {
			return message;
		}
		try {
			return String.format(message, formatArgs);
		} catch (IllegalFormatException e) {
			StringBuilder bob = new StringBuilder(message);
			for (Object formatArg : formatArgs) {
				bob.append("; ").append(formatArg);
			}
			return bob.toString();
		}
	}
    public static boolean isNullOrEmpty(String s) {
        return s == null || s.trim().isEmpty();
    }
    
}
